package main

import "fmt"

//方法具体传入内部的是值还是地址取决于方法的定义
//和实际是 结构还是 结构体指针来调用方法无关
func main() {
	p := Point{1, 2}
	p.m1()
	fmt.Println(p)
	p.m2()         //虽然p是结构，但是由于m2是绑定在 Point指针上的，因此实际传入的是指针 golang进行了优化处理
	fmt.Println(p) //p被改变了

	pPointer := &Point{2, 2}
	pPointer.m1() //虽然pPointer是指针，但是 pPointer.m1()=(*pPointer).m1()
	fmt.Println(*pPointer)
	pPointer.m2()
	fmt.Println(*pPointer)
}

type Point struct {
	X int32
	Y int32
}

func (p Point) m1() {
	p.X = 10
	p.Y = 100
}

func (p *Point) m2() {
	p.X = 10
	p.Y = 100
}
